import Vue from "vue";
import Vuex from "vuex";
import LongStore from "vuex-persistedstate";
import CryptoJS from "crypto-js";

Vue.use(Vuex);

const store = new Vuex.Store({
    plugins: [LongStore()],
    strict: false,
    modules: {
        common: {
            namespaced: true,    // 开启命名控件
            state: {
                userInfo: ""
            },
            getters: {
                /** 获取用户信息 */
                getUserInfo: state => {
                    let info = CryptoJS.AES.decrypt(state.userInfo, 'ABCDEF').toString(CryptoJS.enc.Utf8)
                    return info ? JSON.parse(info) : {};
                }
            },
            actions: {
                /** 执行用户数据改变的动作 */
                setUserInfo: function({commit}, user) {
                    /** 因为页面测试数据是一个字符串 ,加密的对象是一个字符串，因此必须原始就是字符串或者转为字符串 */
                    let str = CryptoJS.AES.encrypt(JSON.stringify(user), 'ABCDEF').toString();
                    // let str = CryptoJS.AES.encrypt(user, 'ABCDEF').toString();
                    commit('mutationUserInfo', str);
                }
            },
            mutations: {
                /** 用户数据扭转方法 */
                mutationUserInfo(state, userStr) {
                    state.userInfo = userStr;
                }
            }
        },
        demand: {
            namespaced: true,    // 开启命名控件
        }
    }
});

export default store;